package com.echo.service;

import com.echo.dao.CategoryDao;
import com.echo.entity.Category;
// 使用System.out代替Logger以减少依赖


import java.util.List;

/**
 * 分类服务类，处理分类相关的业务逻辑
 */
public class CategoryService {
    // 移除Logger，使用System.out输出调试信息
    private CategoryDao categoryDao = new CategoryDao();
    
    /**
     * 添加分类
     */
    public int addCategory(Category category) {
        System.out.println("[SERVICE DEBUG] 开始处理添加分类请求");
        
        // 验证分类对象
        if (category == null) {
            System.out.println("[SERVICE DEBUG] 分类对象为null");
            return 0;
        }
        
        System.out.println("[SERVICE DEBUG] 待添加分类名称: " + category.getCategoryName());
        
        // 验证分类名称是否已存在
        System.out.println("[SERVICE DEBUG] 检查分类名称是否已存在: " + category.getCategoryName());
        if (categoryDao.existsByName(category.getCategoryName())) {
            System.out.println("[SERVICE DEBUG] 分类名称已存在: " + category.getCategoryName());
            return -1; // 返回-1表示名称已存在
        }
        
        // 调用DAO层插入分类
        System.out.println("[SERVICE DEBUG] 调用categoryDao.insert()方法");
        int categoryId = categoryDao.insert(category);
        
        // 处理返回结果
        System.out.println("[SERVICE DEBUG] categoryDao.insert()返回值: " + categoryId);
        if (categoryId > 0) {
            System.out.println("[SERVICE DEBUG] 添加分类成功，ID: " + categoryId + ", 名称: " + category.getCategoryName());
        } else {
            System.out.println("[SERVICE DEBUG] 添加分类失败，ID返回: " + categoryId + ", 名称: " + category.getCategoryName());
        }
        
        return categoryId;
    }
    
    /**
     * 更新分类
     */
    public boolean updateCategory(Category category) {
        // 验证分类是否存在
        Category existingCategory = categoryDao.findById(category.getCategoryId());
        if (existingCategory == null) {
            System.out.println("分类不存在，无法更新: ID = " + category.getCategoryId());
            return false;
        }
        
        // 如果分类名称发生变化，验证新名称是否已存在
        if (!existingCategory.getCategoryName().equals(category.getCategoryName()) && 
            categoryDao.existsByName(category.getCategoryName())) {
            System.out.println("分类名称已存在: " + category.getCategoryName());
            return false;
        }
        
        int rowsAffected = categoryDao.update(category);
        if (rowsAffected > 0) {
            System.out.println("更新分类成功，ID: " + category.getCategoryId() + ", 名称: " + category.getCategoryName());
            return true;
        } else {
            System.out.println("更新分类失败，ID: " + category.getCategoryId() + ", 名称: " + category.getCategoryName());
            return false;
        }
    }
    
    /**
     * 删除分类（物理删除）
     */
    public boolean deleteCategory(Integer categoryId) {
        // 验证分类是否存在
        Category category = categoryDao.findById(categoryId);
        if (category == null) {
            System.out.println("分类不存在，无法删除: ID = " + categoryId);
            return false;
        }
        
        int rowsAffected = categoryDao.delete(categoryId);
        if (rowsAffected > 0) {
            System.out.println("删除分类成功，ID: " + categoryId + ", 名称: " + category.getCategoryName());
            return true;
        } else {
            System.out.println("删除分类失败，ID: " + categoryId);
            return false;
        }
    }
    
    /**
     * 根据ID获取分类
     */
    public Category getCategoryById(Integer categoryId) {
        Category category = categoryDao.findById(categoryId);
        if (category == null) {
            System.out.println("未找到分类: ID = " + categoryId);
        }
        return category;
    }
    
    /**
     * 获取所有分类
     */
    public List<Category> getAllCategories() {
        List<Category> categories = categoryDao.findAll();
        System.out.println("获取分类列表，共 " + categories.size() + " 个分类");
        return categories;
    }
    
    // 父分类和子分类相关方法已移除，因数据库表结构不支持
    
    /**
     * 检查分类名称是否已存在
     */
    public boolean isCategoryNameExists(String name) {
        System.out.println("检查分类名称是否存在，名称: " + name);
        return categoryDao.existsByName(name);
    }
}